import http from '@/axios'
import { handleSuccess, handleError } from '@/utils/responseHandler'

/**
 * 部门管理相关API
 */
export const DepartmentApi = {
    /**
     * 获取部门列表（分页）
     * @param {Object} query - 查询参数
     * @param {Number} [query.pageNum=1] - 当前页码
     * @param {Number} [query.pageSize=10] - 每页数量
     * @param {String} [query.name] - 部门名称搜索
     * @param {Number} [query.parentId] - 父部门ID筛选
     * @returns {Promise} 部门列表Promise
     */
    getDepartmentList: (query) =>
        http.get('/dept/list', { params: query })
            .then(res => handleSuccess(res, '获取部门列表成功'))
            .catch(error => handleError(
                // 确保error对象存在response属性
                error || { response: {} },
                '获取部门列表失败',
                '请检查查询条件或网络连接'
            )),

    /**
     * 获取所有部门（树形结构）
     * @returns {Promise} 部门树形结构Promise
     */
    getDeptTree: () =>  // 方法名统一为getDeptTree，与后端路径对应
        http.get('/dept/tree')
            .then(res => handleSuccess(res, '获取所有部门成功'))
            .catch(error => handleError(
                // 确保error对象存在response属性
                error || { response: {} },
                '获取所有部门失败',
                '请刷新页面重试'
            )),

    /**
     * 获取部门详情
     * @param {String|Number} id - 部门ID
     * @returns {Promise} 部门详情Promise
     */
    getDepartmentDetail: (id) =>
        http.get(`/dept/detail/${id}`)
            .then(res => handleSuccess(res, '获取部门详情成功'))
            .catch(error => handleError(
                error,
                '获取部门详情失败',
                '部门可能不存在或您没有查看权限'
            )),

    /**
     * 创建部门
     * @param {Object} data - 部门数据
     * @returns {Promise} 创建结果Promise
     */
    createDepartment: (data) =>
        http.post('/dept/create', data)
            .then(res => handleSuccess(res, '部门创建成功'))
            .catch(error => handleError(
                error,
                '部门创建失败',
                '请检查输入数据格式'
            )),

    /**
     * 更新部门
     * @param {Object} data - 更新数据（需包含id）
     * @returns {Promise} 更新结果Promise
     */
    updateDepartment: (data) => {
        // 确保数据中包含id
        if (!data || !data.id) {
            return Promise.reject(new Error('部门ID不能为空'));
        }
        return http.put('/dept/update', data)
            .then(res => handleSuccess(res, '部门更新成功'))
            .catch(error => handleError(
                error,
                '部门更新失败',
                '请检查更新数据或刷新重试'
            ));
    },

    /**
     * 删除部门
     * @param {String|Number} id - 部门ID
     * @returns {Promise} 删除结果Promise
     */
    deleteDepartment: (id) => {
        if (!id) {
            return Promise.reject(new Error('部门ID不能为空'));
        }
        return http.delete(`/dept/delete/${id}`)
            .then(res => handleSuccess(res, '部门删除成功'))
            .catch(error => handleError(
                error,
                '部门删除失败',
                '您可能没有操作权限或部门存在子部门'
            ));
    },

    /**
     * 批量调整部门结构
     * @param {Object} data - 部门结构调整数据
     * @returns {Promise} 调整结果Promise
     */
    updateDeptStructure: (data) =>
        http.put('/dept/structure', data)
            .then(res => handleSuccess(res, '部门结构调整成功'))
            .catch(error => handleError(
                error,
                '部门结构调整失败',
                '请检查调整数据或刷新重试'
            )),

    /**
     * 获取部门用户列表
     * @param {Object} query - 查询参数
     * @param {Number} [query.deptId] - 部门ID
     * @param {Number} [query.pageNum=1] - 当前页码
     * @param {Number} [query.pageSize=10] - 每页数量
     * @returns {Promise} 部门用户列表Promise
     */
    getDeptUsers: (query) => {
        if (!query || !query.deptId) {
            return Promise.reject(new Error('部门ID不能为空'));
        }
        return http.get('/dept/users', { params: query })
            .then(res => handleSuccess(res, '获取部门用户成功'))
            .catch(error => handleError(
                error,
                '获取部门用户失败',
                '请检查查询条件或刷新重试'
            ));
    }
}